package polymorphism;

public class Test {
    public static void main(String[] args){
        animalCry(new Dog());
        animalCry(new Cat());

        // Animal a = new Animal();
        // a.shout();

        // 编译类型Animal  运行类型Dog
        Animal d_1 = new Dog();
        d_1.shout();
        // d_1.seeDoor();    // Dog类特有的方法
        // Dog d_2 = (Dog)d_1;     //向下转型,强制转型
        // d_2.seeDoor();
        ((Dog)d_1).seeDoor();

        // ((Cat)d_1).catMouse();      // 编译类型Animal  运行类型Cat,Dog类不能向下转型为Cat类

        // instanceof 判断d_1是否是Cat类的实例
        if(d_1 instanceof Cat){
            ((Cat)d_1).catMouse();
        }


        // Dog d_3 = new Dog();
        // d_3.seeDoor();      // 调用Dog类特有的方法

        // // Dog d = new Dog();
        // // d.shout();

        // Cat c = new Cat();
        // c.shout();
    }


    static void animalCry(Animal animal){
        System.out.println("animalCry");
        animal.shout();     // 可以出现多态
    }
}
